import torch
import torch.nn as nn

# batch_first 是 PyTorch RNN 层中的一个重要参数，用于控制输入和输出张量的维度顺序。
# batch_first=False（默认值）：
# 输入张量形状：(seq_len, batch_size, input_size)
# 输出张量形状：(seq_len, batch_size, hidden_size)
# batch_first=True：
# 输入张量形状：(batch_size, seq_len, input_size)
# 输出张量形状：(batch_size, seq_len, hidden_size)

# batch_first=False：适合传统的时间序列处理，与大多数论文和教程保持一致
# batch_first=True：适合习惯 batch 维度在前的用户，与 CNN 等其他 PyTorch 层保持一致
rnn = nn.RNN(input_size=4, hidden_size=2, num_layers=1, batch_first=False)

# inputs = torch.randn(seq_len, batch_size, input_size)
# hidden = torch.zeros(num_layers, batch_size, hidden_size)
# 每一个样本有3个时间步，每个时间步有4个输入向量，批量大小为1
inputs = torch.randn(3, 1, 4)
# 网络层数为1，每一层批量数为1，隐藏层输入向量大小为2
hidden = torch.zeros(1, 1, 2)

out, hidden = rnn(inputs, hidden)

print('Output size:', out.shape)
print('Output:', out)
print('Hidden size: ', hidden.shape)
print('Hidden: ', hidden)
